#!/usr/bin/env node

const fs = require('fs')
const path = require('path')

console.log('🚀 开始构建微信小程序...')

// 检查必要的配置文件
function checkRequiredFiles() {
  const requiredFiles = [
    'manifest.json',
    'pages.json',
    'App.vue',
    'main.js'
  ]
  
  for (const file of requiredFiles) {
    if (!fs.existsSync(path.join(process.cwd(), file))) {
      console.error(`❌ 缺少必要文件: ${file}`)
      process.exit(1)
    }
  }
  
  console.log('✅ 必要文件检查完成')
}

// 检查小程序配置
function checkMiniProgramConfig() {
  try {
    const manifestPath = path.join(process.cwd(), 'manifest.json')
    const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'))
    
    if (!manifest['mp-weixin']) {
      console.error('❌ manifest.json 中缺少 mp-weixin 配置')
      process.exit(1)
    }
    
    if (!manifest['mp-weixin'].appid) {
      console.warn('⚠️  建议在 manifest.json 中配置小程序 appid')
    }
    
    console.log('✅ 小程序配置检查完成')
  } catch (error) {
    console.error('❌ 读取 manifest.json 失败:', error.message)
    process.exit(1)
  }
}

// 检查页面配置
function checkPagesConfig() {
  try {
    const pagesPath = path.join(process.cwd(), 'pages.json')
    const pages = JSON.parse(fs.readFileSync(pagesPath, 'utf8'))
    
    if (!pages.pages || pages.pages.length === 0) {
      console.error('❌ pages.json 中没有配置页面')
      process.exit(1)
    }
    
    // 检查页面文件是否存在
    for (const page of pages.pages) {
      const pagePath = path.join(process.cwd(), page.path + '.vue')
      if (!fs.existsSync(pagePath)) {
        console.warn(`⚠️  页面文件不存在: ${page.path}.vue`)
      }
    }
    
    console.log('✅ 页面配置检查完成')
  } catch (error) {
    console.error('❌ 读取 pages.json 失败:', error.message)
    process.exit(1)
  }
}

// 检查静态资源
function checkStaticAssets() {
  const staticDir = path.join(process.cwd(), 'static')
  
  if (!fs.existsSync(staticDir)) {
    console.warn('⚠️  static 目录不存在')
    return
  }
  
  // 检查必要的图标文件
  const requiredIcons = [
    'static/assets/public/tablebar-home-normal.png',
    'static/assets/public/tablebar-home-select.png',
    'static/assets/public/tablebar-source-normal.png',
    'static/assets/public/tablebar-source-select.png',
    'static/assets/public/tablebar-news-normal.png',
    'static/assets/public/tablebar-news-select.png',
    'static/assets/public/tablebar-me-normal.png',
    'static/assets/public/tablebar-me-select.png'
  ]
  
  let missingIcons = []
  for (const icon of requiredIcons) {
    if (!fs.existsSync(path.join(process.cwd(), icon))) {
      missingIcons.push(icon)
    }
  }
  
  if (missingIcons.length > 0) {
    console.warn('⚠️  缺少以下图标文件:')
    missingIcons.forEach(icon => console.warn(`   - ${icon}`))
  } else {
    console.log('✅ 静态资源检查完成')
  }
}

// 优化建议
function provideBuildTips() {
  console.log('\n📝 小程序构建优化建议:')
  console.log('1. 确保图片资源大小合理，建议单个文件不超过2MB')
  console.log('2. 使用 webp 格式图片可以减小包体积')
  console.log('3. 及时清理无用的页面和组件')
  console.log('4. 使用分包加载优化首次启动速度')
  console.log('5. 定期检查和清理无用的依赖')
  
  console.log('\n🔧 开发调试建议:')
  console.log('1. 使用微信开发者工具进行真机调试')
  console.log('2. 关注小程序性能监控数据')
  console.log('3. 测试不同网络环境下的加载速度')
  console.log('4. 验证用户授权流程的完整性')
}

// 生成小程序配置摘要
function generateConfigSummary() {
  try {
    const manifestPath = path.join(process.cwd(), 'manifest.json')
    const pagesPath = path.join(process.cwd(), 'pages.json')
    
    const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'))
    const pages = JSON.parse(fs.readFileSync(pagesPath, 'utf8'))
    
    console.log('\n📊 配置摘要:')
    console.log(`应用名称: ${manifest.name}`)
    console.log(`应用版本: ${manifest.versionName}`)
    console.log(`小程序 AppID: ${manifest['mp-weixin']?.appid || '未配置'}`)
    console.log(`页面数量: ${pages.pages?.length || 0}`)
    console.log(`是否配置 TabBar: ${pages.tabBar ? '是' : '否'}`)
    
    if (pages.tabBar) {
      console.log(`TabBar 页面数: ${pages.tabBar.list?.length || 0}`)
    }
  } catch (error) {
    console.warn('⚠️  生成配置摘要失败:', error.message)
  }
}

// 主函数
function main() {
  try {
    checkRequiredFiles()
    checkMiniProgramConfig()
    checkPagesConfig()
    checkStaticAssets()
    generateConfigSummary()
    provideBuildTips()
    
    console.log('\n🎉 小程序构建检查完成！')
    console.log('💡 现在可以使用以下命令启动开发:')
    console.log('   npm run dev:mp-weixin')
    console.log('   或者在微信开发者工具中导入项目')
    
  } catch (error) {
    console.error('❌ 构建检查失败:', error.message)
    process.exit(1)
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  main()
}

module.exports = {
  checkRequiredFiles,
  checkMiniProgramConfig,
  checkPagesConfig,
  checkStaticAssets,
  generateConfigSummary
} 